1.17 Optionsfelder
 
Doch zurück zu unserer Kaffeemaschine. Mehmet mault schon seit einer Weile, weil es nur Kaffee gibt. Er hätte gerne einen Tee. Und Clara wollte auch schon etwas anderes haben. Der Apparat wird also erweitert.
Für die verschiedenen Getränke hätte ich gerne jeweils einen Radiobutton auf dem Formular. Man kann die Buttons zwar einzeln auf dem Formular platzieren, allerdings werden später weitere Radiobuttons benötigt, die nicht zur Getränkekategorie gehören. Deshalb sollten Sie zuerst einen Rahmen auf dem Formular aufziehen. Er wird »grpGetränke« genannt (Name), die Beschriftung lautet: »Getränke« (Text). Die Optionsfelder werden genannt: »optKaffee«, »optTee«, »optSchokolade«, »optWasser« und »optCola«. Ihre Beschriftungen lauten analog: »Kaffee«, »Tee«, »Schokolade«, »Wasser« und »Cola«. Wenn Sie möchten, dass der Benutzer mit gedrückter (Alt) + (Buchstabe) ein Getränk auswählen kann, dann muss der entsprechende Buchstabe unterstrichen sein, beispielsweise »&Kaffee«. Da von den Optionsfeldern nur eines ausgewählt werden kann, wird einer der Buttons vorbelegt. Dies kann man über die Eigenschaft »Checked« (Kategorie »Darstellung«) einschalten, natürlich nur bei einem der Buttons innerhalb des Rahmens.
Abbildung 1.29
Das geänderte Formular
Klickt nun der Benutzer auf die Ok-Schaltfläche, dann wird das korrekte Getränk ausgegeben. (Hm, kennen Sie solche Automaten, bei denen man heiße Brühe und Pfefferminztee kaufen kann?) Dies kann man ganz einfach mit einer Verzweigung abfragen. Da der Automat sich den ausgewählten Radiobutton »merken« soll, wird mit einer Variablen gearbeitet:
If optCola.Checked = True Then
strGetränk = "Cola"
ElseIf optKaffee.Checked = True Then
strGetränk = "Kaffee"
ElseIf optTee.Checked = True Then
strGetränk = "Tee"
ElseIf optSchokolade.Checked = True Then
strGetränk = "Schokolade"
ElseIf optWasser.Checked = True Then
strGetränk = "Wasser"
End If
Den letzten Zweig hätte man auch so schreiben können:
Else
strGetränk = "Wasser"
denn es gibt keine weiteren Getränke mehr.
Abbildung 1.30
Nun gibt es auch andere Getränke.
Damit das gewählte Getränk angezeigt wird, muss die Variable zur Zeichenkette hinzugefügt werden:
MessageBox("Achtung: " & txtName.Text & _
"Jetzt gibt es " & strGetränk & "!")
Selbstverständlich muss die Variable korrekt deklariert werden, damit man sie verwenden kann. Ganz am Anfang steht:
Dim strGetränk as String
1.17.1 Schnell und ordentlich mehrere Steuerelemente platzieren
 
Werden mehrere Radiobuttons benötigt, so können sie natürlich auf die gleiche Weise erzeugt werden, oder indem ein Button in die Zwischenablage kopiert (mit dem Kopieren-Symbol, dem Menüpunkt Bearbeiten . Kopieren, der rechten Maustaste auf die Schaltfläche oder (Strg) + (C)) und anschließend eingefügt wird (mit dem Einfügen-Symbol, dem Menüpunkt Bearbeiten . Einfügen, der rechten Maustaste auf die Schaltfläche oder (Strg) + (V)). Auf die Platzierung haben Sie keinen Einfluss - die Schaltfläche wird in die Mitte der Seite gesetzt. Von dort kann/muss sie anschließend verschoben werden. Fügen Sie die Schaltfläche mehrere Male hintereinander ein, so werden die Buttons alle übereinander gelegt. Sie müssen dann einzeln aus dem Stapel herausgezogen werden. Leider gibt es keinen Menüpunkt Duplizieren.
Eleganter funktioniert das Kopieren mit Drag & Drop: Klicken Sie auf eine Schaltfläche und ziehen Sie diese mit gedrückter (Strg) über die Form. Neben dem Steuerelement erscheint ein Pluszeichen in einem Kästchen. Beim Loslassen (zuerst die Maus loslassen!) haben Sie eine Kopie der Schaltfläche an der gewünschten Stelle.
Wenn auf dem Dialogfeld mehrere Buttons zu finden sind, so können sie schnell angeordnet werden. Dazu müssen die Radiobuttons, die ausgerichtet werden, markiert werden. Dies geschieht entweder mit gedrückter (Strg), (Umschalt) oder durch Umfahren mit der Maus. Sind mehrere ausgewählt, so können sie über den Menüpunkt Format . Ausrichten horizontal (Links, Zentriert, Rechts) oder vertikal (Oben, Mitte, Unten) angeordnet werden. Dabei richten sich die Steuerelemente immer an dem zuletzt markierten Steuerelement aus, also an demjenigen, welches schwarze Anfasser hat.
Abbildung 1.31
Mehrere Steuerelemente sind markiert und werden ausgerichtet.
Liegen die Schaltflächen übereinander, so kann der vertikale Abstand gleichmäßig verteilt werden: über das Menü Format . Vertikaler Abstand. Dabei bleiben das oberste und das unterste Steuerelement an ihrer Position; alle anderen werden so verteilt, dass sie gleich große Abstände dazwischen bilden.
Analog dazu kann bei nebeneinander liegenden Buttons der horizontale Abstand geändert werden. »Vergrößern« oder »vermindern« ändert den Abstand. »Entfernen« setzt die Schaltflächen direkt nebeneinander.
Sind mehrere Schaltflächen markiert, so können sie, wenn sie unterschiedlich groß sind, mit dem Menü Format . Größe in der Höhe, der Breite oder beidem zugleich an die Größe der anderen angepasst werden. Ausschlaggebend ist dabei das zuletzt markierte Steuerelement. Dieses wird durch weiße Eckanfasser gekennzeichnet und nicht durch schwarze.
Format . Auf Formular zentrieren bewirkt, wie der Name vermuten lässt, ein In-die-Mitte-Setzen. Diese Option ist sicherlich nur für ein Steuerelement oder eine Gruppe interessant.
Übrigens kann man auch die Buttons numerisch platzieren. Jeder Button besitzt die Eigenschaft »Location« und »Size« (in der Kategorie »Layout«). Dort können Höhe und Breite, beziehungsweise Abstand von links und oben festgelegt werden. Dies kann sowohl für einen Button als auch für mehrere markierte vorgenommen werden.
Warum ist mir das so wichtig? Wenn ich einem Kunden ein Programm ausliefere, dann ist das erste, was er sieht, die Eingabemaske (später auch noch die Ausgabemöglichkeit). Und viele Kunden fangen mit ihrer Kritik an dem an, was sie sehen. Dazu gehört eben die Position solcher Steuerelemente, ihre Größe, die gute Lesbarkeit der Texte auf den Buttons und so weiter. Welche tollen Gedanken ich mir bei der Programmierung gemacht habe, das sieht keiner und das interessiert auch niemanden. Deshalb achte ich sehr auf die Gestaltung der Oberfläche und auf ein ordentliches und ansprechendes Aussehen der Maske. Auf die saubere Programmierung achte ich natürlich auch.
|